home *** CD-ROM | disk | FTP | other *** search
-
- /************************************************************************/
- #define OP_NAME "pgmmean"
- #define VERSION "1.01"
- #define DATE "30.01.98"
- #define AUTHOR "Stefan Diener"
- /************************************************************************/
-
- #include <stdio.h>
- #include <stdarg.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include <sys/types.h>
-
- #include <STIMP/pgm.c>
-
- struct PGM_Info source, desti;
- static int m, n;
- static int edge=1;
-
- void Do_It(void)
- {
- int i, j, k, l, index;
- unsigned int su, factor;
- unsigned char *src, *dst;
-
- src=source.Data;
- dst=desti.Data;
- desti.maxval=source.maxval;
-
- /* Skalierungsfaktor ermitteln */
- factor=(2*edge+1)*(2*edge+1);
-
- /* Filtermaske anwenden */
- for (i=edge;i<(n-edge);i++)
- for (l=edge;l<(m-edge);l++)
- {
- index=l*n+i;
- su=0;
-
- for (j=-edge; j<=edge; j++)
- for (k=-edge; k<=edge; k++)
- su+=src[index+j*n+k];
-
- dst[(l-edge)*(n-2*edge)+(i-edge)]=(unsigned char) (su/factor);
- }
- }
-
- int main(int argc,char **argv)
- /* Hauptprogramm */
- {
- int i;
-
- /* offizielle Begruessung */
- PrintOpening(argc,argv);
-
- /* Uebergebene Parameter auswerten */
- for (i=1; i<argc; i++)
- {
- if ((argv[i][0]=='-') && argv[i][1])
- {
- switch (argv[i][1])
- {
- case '3': edge=1;
- break;
-
- case '5': edge=2;
- break;
-
- case '7': edge=3;
- break;
-
- case '9': edge=4;
- break;
-
- case 'v': beVerbose=FALSE;
- break;
-
- default: PrintMessage("Unknown parameter: %s", argv[i]);
- Hilfe();
- exit(-1);
- break;
- }
- }
-
- if (argv[i][0]=='+')
- {
- switch (argv[i][1])
- {
- case 'v': beVerbose=TRUE;
- break;
-
- default: PrintMessage("Unknown parameter: %s", argv[i]);
- Hilfe();
- exit(-1);
- break;
- }
- }
- }
-
- /* Mindestzahl der Argumente pruefen */
- if (argc<3)
- {
- PrintMessage("Wrong number of arguments !");
- Hilfe();
- exit(-1);
- }
-
- /* Anzahl der Dateinamen überprüfen */
- if (FilenameCount(argc, argv)!=2)
- {
- PrintMessage("Wrong number of file names !");
- Hilfe();
- exit(-1);
- }
-
- if (ReadPGMFile(GetFilename(1,argc,argv), &source)==0)
- {
- m=source.height;
- n=source.width;
-
- if (CreatePGMArray(m-2*edge, n-2*edge, &desti)==0)
- {
- PrintMessage("Working ...");
- Do_It();
-
- WritePGMFile(GetFilename(2,argc,argv), &desti);
- FreePGMArray(&desti);
- }
-
- FreePGMArray(&source);
- }
-
- PrintClosing();
- exit(0);
- }
-
-